using System;
using HCP.Responses;
using HCP.SimpleJSON;
using UnityEngine;

namespace HCP.Requests
{
	public class GetElementAttribute : JobRequest
	{
		public GetElementAttribute(JSONClass json) : base(json)
		{
		}

		public string Id
		{
			get
			{
				return base.Data["elementId"];
			}
		}

		public GetElementAttribute.EAttribute Attribute
		{
			get
			{
				JSONNode d = base.Data["attribute"];
				string text = d;
				if (text != null)
				{
					if (text == "name")
					{
						return GetElementAttribute.EAttribute.NAME;
					}
					if (text == "className")
					{
						return GetElementAttribute.EAttribute.CLASSNAME;
					}
					if (text == "displayed")
					{
						return GetElementAttribute.EAttribute.DISPLAYED;
					}
					if (text == "enabled")
					{
						return GetElementAttribute.EAttribute.ENABLED;
					}
					if (text == "selected")
					{
						return GetElementAttribute.EAttribute.SELECTED;
					}
				}
				throw new FormatException("Unsupported element request");
			}
		}

		public override JobResponse Process()
		{
			string value = null;
			Component elementById = JobRequest.GetElementById(this.Id);
			switch (this.Attribute)
			{
			case GetElementAttribute.EAttribute.NAME:
				value = Element.GetName(elementById);
				break;
			case GetElementAttribute.EAttribute.CLASSNAME:
				value = Element.GetClassName(elementById);
				break;
			case GetElementAttribute.EAttribute.DISPLAYED:
				value = ((!Element.DetermineDisplayed(elementById)) ? "false" : "true");
				break;
			case GetElementAttribute.EAttribute.ENABLED:
				value = ((!Element.GetEnabled(elementById)) ? "false" : "true");
				break;
			case GetElementAttribute.EAttribute.SELECTED:
				value = ((!Element.GetSelected(elementById)) ? "false" : "true");
				break;
			}
			return new StringResponse(value);
		}

		public enum EAttribute
		{
			NAME,
			CLASSNAME,
			DISPLAYED,
			ENABLED,
			SELECTED
		}
	}
}
